// 公共逻辑都放到这里

//配置axios的基地址 因为每个页面都要发请求，所以放到这里
axios.defaults.baseURL = "https://hmajax.itheima.net";

// 1.添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么,比如: 统一设置token
    // console.log(config);
    // config.headers['info']='itheima666'
    //获取token
    const token = localStorage.getItem("token");
    // console.log(token, "我是拦截器里的token");
    //2.设置token 有token才设置 没token，比如说注册登录时就不需要设置
    if (token) {
      config.headers["Authorization"] = token;
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 1. 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么，比如: 数据剥离
    //这是axios包装过的数据
    // console.log(response, "我是响应拦截器第一个回调函数里的数据");
    //这里是服务器真正返回的数据
    // console.log(response.data, "我是response.data");
    //不再使用return response 而是response.data
    //这样就能拿到真正的服务器数据而不是axios包装过的
    return response.data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么: 比如统一处理token失效
    // console.dir(error);
    console.log("我是响应拦截器里的错误");
    //判断token失效  记得用try catch来捕获错误哦
    //失效原因 过期/被篡改(可以自己去本地存储修改token)
    //2.统一处理token失效 把index.js catch里的代码复制过来即可
    if (error.response.status === 401) {
      //删除缓存并提示用户
      localStorage.removeItem("token");
      localStorage.removeItem("username");
      showToast("请重新登录");
      setTimeout(() => {
        //返回登录页 记得写个定时器让用户先看到提示再跳转
        location.href = "login.html";
      }, 1500);
    }
    return Promise.reject(error);
  }
);

//抽取轻提示函数
function showToast(msg) {
  //实例化toast
  const toastDom = document.querySelector(".my-toast");
  const toast = new bootstrap.Toast(toastDom);
  //修改内容
  document.querySelector(".toast-body").innerText = msg;
  //调用方法显示
  toast.show();
}

//抽取一个校验函数 用来判断用户是否登录/是否有权限进入本页面
function checkLogin() {
  const token = localStorage.getItem("token");
  console.log(token, "token");
  //判断token 有则什么都不做
  //没有说明用户没有登录/没有权限，则提示用户并跳转登录页
  if (!token) {
    //提示用户并跳转登录页
    showToast("请先登录");
    //定时器让提示显示完后再跳转
    setTimeout(() => {
      location.href = "login.html";
    }, 1500);
  }
}

//抽取渲染函数
function renderUsername() {
  const username = localStorage.getItem("username");
  console.log(username);
  document.querySelector(".username").innerText = username;
}

//抽取退出登录函数
function registerLogout() {
  //绑定点击事件
  document.querySelector("#logout").addEventListener("click", () => {
    // console.log(123);
    //删除缓存并跳转登录页
    localStorage.removeItem("token");
    localStorage.removeItem("username");
    location.href = "login.html";
  });
}
